module.exports = class PluginDemo {
  apply(complier){
    console.log("complier生成");
     //在这里注册事件，类似于window.onload  $(function(){})
    // console.log(complier)
    //   compiler.hooks.事件名称.事件类型(name, function(compilation){
    //     //事件处理函数
    // })
    complier.hooks.done.tap('pluginDemo-done',function (compilation) {
        console.log(compilation,'处理结束')
      })
  }
}

// compiler 是 Webpack 的核心对象之一，它代表了当前的编译上下文。当我们使用 Webpack 进行构建时，Webpack 会创建一个 compiler 对象，并在其中保存构建过程中所需的所有信息和状态。在整个构建流程中，我们可以通过访问 compiler 对象，来获取或修改相关的编译选项、插件列表、输入输出路径、打包结果等信息。

// 具体来说，compiler 对象包含以下几个主要属性和方法：

// options：保存了当前编译的所有选项，包括入口文件、输出目录、模块解析方式、文件处理规则等等；
// context：保存了当前编译的上下文路径，通常是项目根目录；
// hooks：包含了所有的 Webpack 构建事件钩子，我们可以通过监听这些钩子来自定义 Webpack 构建过程中的各个阶段；
// run()：开始执行 Webpack 构建的方法；
// watch()：开始监视文件变化并执行 Webpack 构建的方法；
// emitAssets(callback)：在打包完成后，触发输出资源（asset）的事件回调，该方法接受一个回调函数作为参数，该函数在输出资源准备好后被调用；
// emitAsset(name, content)：手动添加一个输出资源到 compilation.assets 中，在输出阶段将该资源写入文件系统，该方法接受两个参数，name 为资源名称，content 为资源内容。
// 我们通常在使用 Webpack 时不会直接去操作 compiler 对象，而是通过编写插件来对其进行扩展和修改。插件可以监听 compiler 中的各个事件钩子，或者通过向 compiler 注入自定义属性和方法，来实现对 Webpack 构建过程的定制化扩展。

// 总之，compiler 是 Webpack 的核心对象之一，它代表了当前的编译上下文。我们可以通过访问 compiler 对象，来获取或修改相关的编译选项、插件列表、输入输出路径、打包结果等信息。在使用 Webpack 时，我们通常通过编写插件来对 compiler 进行扩展和修改。